package menus;

/**
 * 
 * @author BITCOMPANY
 * @name BITCLUB
 * @version 1.0
 * @fecha 12-09-2011
 * @fechamod: 13/09/2011
 */
import bitclub.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Menu {

    //Usuario que maneja el menú
    private Trabajador usuario;
    //Bajar a principal
    private boolean bajaPrincipal;

    /**
     * Crea un menú para controlar todas las opciones del videoclub para los empleados.
     * @param Trabajador Se trata de la persona que está operando los menús
     */
    public Menu(Trabajador usuario) {
        this.usuario = usuario;
        bajaPrincipal = false;
    }

//Menus ////////////////////////////////////////////////////////////////////////
    /**
     * Muestra el menú principal del sistema de menús para trabajadores
     * PRINCIPAL
     */
    public void menuPrincipal() {
        int respuesta = 0;
        do {
            //Si llegamos aquí con bajaPrincipal=true ya no hay que seguir bajando
            bajaPrincipal = false;
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU PRINCIPAL", new String[]{"Clientes", "Peliculas", "Videojuegos", "Alquiler", "Trabajadores", "Tarifas", "Ofertas", "Estadisticas", "Caja", "Proveedores","Videoclub"}, "Terminar");
            switch (respuesta) {
                case 1:
                    menuClientes();
                    break;
                case 2:
                    menuPeliculas();
                    break;
                case 3:
                    menuVideojuegos();
                    break;
                case 4:
                    menuAlquiler();
                    break;
                case 5:
                    menuTrabajadores();
                    break;
                case 6:
                    menuTarifas();
                    break;
                case 7:
                    menuOfertas();
                    break;
                case 8:
                    menuEstadisticas();
                    break;
                case 9:
                    menuCaja();
                    break;
                case 10:
                    menuVideoclub();
                    break;
                case 11:
                    menuProveedores();
                    break;
                case 0:
                    boolean salir = BitUtil.dameConfirmacion("Quiere abandonar la aplicación? (S/N) ");
                    if (!salir) {
                        respuesta = -1;
                    }
            }
        } while (respuesta != 0);
    }

    /**
     * Abre el sub-menú que hace referencia a los clientes
     * PRINCIPAL > CLIENTES
     */
    private void menuClientes() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU CLIENTES", new String[]{"Buscar cliente", "Alta cliente"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    Cliente cliente = Selector.cliente();
                    if (cliente != null) {
                        menuClientesSeleccionado(cliente);
                    }
                    break;
                case 2:
                    OpcionesClientes.opcionClientesDarAlta();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Abre las opciones que se pueden hacer una vez elegido un cliente
     * PRINCIPAL > CLIENTES > BUSCAR > SELECCIONADO
     */
    private void menuClientesSeleccionado(Cliente cliente) {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            System.out.println("Cliente: " + cliente.getNombre() + " " + cliente.getApellidos() + " [" + cliente.getDni() + "]\n\n");
            respuesta = BitUtil.muestraMenu("MENU CLIENTE BUSCAR", new String[]{"Ver cliente", "Ver Alquileres", "Dar Alta/Baja", "Editar", "Ingresar Saldo", "Bloquear"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesClientes.opcionClientesVer(cliente);
                    break;
                case 2:
                    OpcionesClientes.opcionClientesVerAlquileres(cliente);
                    break;
                case 3:
                    OpcionesClientes.opcionClientesDarBaja(cliente);
                    break;
                case 4:
                    OpcionesClientes.opcionClientesEditar(cliente);
                    break;
                case 5:
                    OpcionesClientes.opcionClientesIngresarSaldo(cliente);
                    break;
                case 6:
                    OpcionesClientes.opcionClientesBloquear(cliente);
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Abre el sub-menú que hace referencia a los artículos
     * PRINCIPAL > ARTICULOS
     */
    private void menuPeliculas() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU PELICULAS", new String[]{"Buscar peliculas", "Alta peliculas"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    Pelicula pelicula = Selector.pelicula();
                    if (pelicula != null) {
                        menuPeliculasSeleccionado(pelicula);
                    }
                    break;
                case 2:
                    OpcionesPeliculas.opcionPeliculasDarAlta();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Muestra las opciones que podemos hacer con un artículo seleccionado
     * PRINCIPAL > ARTICULOS > BUSCAR > SELECCIONADO
     */
    private void menuPeliculasSeleccionado(Pelicula pelicula) {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            System.out.println("Película: " + pelicula.getTitulo() + " (" + pelicula.getAno() + ") [Cod. " + pelicula.getId() + "]\n\n");
            respuesta = BitUtil.muestraMenu("MENU PELICULAS SELECCIONADO", new String[]{"Ver datos pelicula", "Dar de Baja", "Editar"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesPeliculas.opcionPeliculasVer(pelicula);
                    break;
                case 2:
                    OpcionesPeliculas.opcionPeliculasDarBaja(pelicula);
                    break;
                case 3:
                    OpcionesPeliculas.opcionPeliculasEditar(pelicula);
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Abre el sub-menú que hace referencia a los artículos
     * PRINCIPAL > ARTICULOS
     */
    private void menuVideojuegos() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU VIDEOJUEGOS", new String[]{"Buscar videojuego", "Alta videojuego"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    Videojuego videojuego = Selector.videojuego();
                    if (videojuego != null) {
                        menuVideojuegosSeleccionado(videojuego);
                    }
                    break;
                case 2:
                    OpcionesVideojuegos.opcionVideojuegosDarAlta();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Muestra las opciones que podemos hacer con un artículo seleccionado
     * PRINCIPAL > ARTICULOS > BUSCAR > SELECCIONADO
     */
    private void menuVideojuegosSeleccionado(Videojuego videojuego) {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            System.out.println("Artículo: " + videojuego.getTitulo() + " (" + videojuego.getAno() + ") [Cod. " + videojuego.getId() + "]\n\n");
            respuesta = BitUtil.muestraMenu("MENU ARTICULOS SELECCIONADO", new String[]{"Ver videojuego", "Dar de Baja", "Editar"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesVideojuegos.opcionVideojuegosVer(videojuego);
                    break;
                case 2:
                    OpcionesVideojuegos.opcionVideojuegosDarBaja(videojuego);
                    break;
                case 3:
                    OpcionesVideojuegos.opcionVideojuegosEditar(videojuego);
                    break;
            }
        } while (respuesta != 0);
    }
    
    /**
     * Menú para alquilar (AQUÍ FALTAN MUCHAS COSAS)
     * PRINCIPAL > ALQUILER
     */
    private void menuAlquiler() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU ALQUILER", new String[]{"Alquiler", "Devolver"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesAlquiler.opcionAlquilar();
                    break;
                case 2:
                    OpcionesAlquiler.opcionDevolver();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Abre el sub-menú que hace referencia a los empleados
     * PRINCIPAL > EMPLEADOS
     */
    private void menuTrabajadores() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU TRABAJADORES", new String[]{"Buscar trabajador", "Alta trabajador"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    Trabajador trabajador = Selector.trabajador();
                    if (trabajador != null) {
                        menuTrabajadoresSeleccionado(trabajador);
                    }
                    break;
                case 2:
                    OpcionesTrabajadores.opcionTrabajadoresDarAlta();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Permite seleccionar un empleado
     * PRINCIPAL > EMPLEADOS > BUSCAR > SELECCIONADO
     */
    private void menuTrabajadoresSeleccionado(Trabajador trabajador) {
        int respuesta;

        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            if (trabajador.isAdministrador()) {
                System.out.println("Administrador: " + trabajador.getNombre() + " " + trabajador.getApellidos() + " [" + trabajador.getDni() + "]\n\n");
            } else {
                System.out.println("Trabajador: " + trabajador.getNombre() + " " + trabajador.getApellidos() + " [" + trabajador.getDni() + "]\n\n");
            }
            respuesta = BitUtil.muestraMenu("MENU EMPLEADOS BUSCAR", new String[]{"Ver empleado", "Dar de Baja", "Editar"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesTrabajadores.opcionTrabajadoresVer(trabajador);
                    break;
                case 2:
                    OpcionesTrabajadores.opcionTrabajadoresDarBaja(trabajador);
                    break;
                case 3:
                    OpcionesTrabajadores.opcionTrabajadoresEditar(trabajador);
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Abre el sub-menú que hace referencia a los empleados
     * PRINCIPAL > TARIFAS
     */
    private void menuTarifas() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU TARIFAS", new String[]{"Buscar tarifa", "Crear nueva tarifa"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    Tarifa tarifa = Selector.tarifa();
                    if (tarifa != null) {
                        menuTarifasSeleccionado(tarifa);
                    }
                    break;
                case 2:
                    OpcionesTarifas.opcionTarifasCrear();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Permite seleccionar un empleado
     * PRINCIPAL > TARIFAS > BUSCAR > SELECCIONADO
     */
    private void menuTarifasSeleccionado(Tarifa tarifa) {
        int respuesta;

        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            System.out.println("Tarifa: " + tarifa.getNombre() + " " + tarifa.getPrecio() + "/ " + tarifa.getRecargo() + " después de " + tarifa.getNumDias() + " dias\n\n");
            respuesta = BitUtil.muestraMenu("MENU TARIFAS", new String[]{"Ver tarifas", "Eliminar", "Editar tarifa"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesTarifas.opcionTarifasVer(tarifa);
                    break;
                case 2:
                    OpcionesTarifas.opcionTarifasEliminar(tarifa);
                    break;
                case 3:
                    OpcionesTarifas.opcionTarifasEditar(tarifa);
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Abre el sub-menú que hace referencia a las ofertas
     * PRINCIPAL > OFERTAS
     */
    public void menuOfertas() {
        int respuesta;
        boolean bajaPrincipal = false;

        do {
            if (bajaPrincipal) {
                return;
            }
            respuesta = BitUtil.muestraMenu("MENU OFERTAS", new String[]{"Buscar oferta", "Alta oferta"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    menuOfertaBuscar();
                    break;
                case 2:
                    OpcionesOfertas.opcionOfertasCrear();
                    break;
            }
        } while (respuesta != 0);
    }

    
    /**
     * Abre las opciones que se pueden hacer con una oferta seleccionada
     * PRINCIPAL > OFERTAS > BUSCAR > SELECCIONADO
     */
    private void menuOfertasSeleccionado(Oferta oferta) {
        if(oferta instanceof OfertaDiaSemana){
            menuOfertasDiaSemanaSeleccionado((OfertaDiaSemana)oferta);
        } else if (oferta instanceof OfertaNumeroArticulo){
            menuOfertasNumeroArticuloSeleccionado((OfertaNumeroArticulo)oferta);
        }
    }
    
    //ver, editar o eliminar la oferta dia de la semana escogida antes
    public void menuOfertasDiaSemanaSeleccionado(OfertaDiaSemana o) {
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        int respuesta, respuesta2;
        boolean seguirEditando = true, confirmacion;
        //como hay tres tipos de ofertasDiaSemana (porcentaje,diaextra,precionuevo) se crean tres String[]
        String parametrosOfertaDiaSemana1[] = {"Porcentaje Descuento: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Dia de la semana: "};
        String parametrosOfertaDiaSemana2[] = {"Dias extras: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Dia de la semana: "};
        String parametrosOfertaDiaSemana3[] = {"Precio Nuevo", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Dia de la semana: "};

        respuesta = BitUtil.muestraMenu("Elije opcion: ", new String[]{"Ver", "Editar", "Eliminar"});

        if (respuesta != 0) {

            switch (respuesta) {
                case 1: //ver
                    System.out.println("\n" + o.toString());
                    break;
                case 2: //editar
                    do {
                        if (o.getTipo() == 1) {//muestra los campos seleccionables para editar segun el tipo de oferta
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaDiaSemana1);
                        } else if (o.getTipo() == 2) {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaDiaSemana2);
                        } else {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaDiaSemana3);
                        }

                        if (respuesta2 != 0) {

                            switch (respuesta2) {
                                case 1:
                                    if (o.getTipo() == 1) {//para editar el campo segun el tipo de oferta
                                        double porcentajeNuevo;
                                        do {
                                            porcentajeNuevo = BitUtil.dameDouble("Introduzca el nuevo porcentaje:  (" + o.getDescuento() + ")\n");
                                        } while (porcentajeNuevo <= 0 || porcentajeNuevo > 100);
                                        o.setDescuento(porcentajeNuevo);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else if (o.getTipo() == 2) {
                                        int diasExtras;
                                        do {
                                            diasExtras = BitUtil.dameEntero("Introduzca los nuevos días Extras:  (" + o.getDiasExtras() + ")\n");
                                        } while (diasExtras <= 0);
                                        o.setDiasExtras(diasExtras);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else {
                                        double precioNuevo = BitUtil.dameDouble("Introduzca el nuevo precio:  (" + o.getPrecioNuevo() + ")\n");
                                        o.setPrecioNuevo(precioNuevo);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    }
                                case 2://resto de campos a editar
                                    String nombreNuevo = BitUtil.dameCadena("Introduzca el nuevo nombre: (" + o.getNombre() + ")\n");
                                    o.setNombre(nombreNuevo);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                case 3:
                                    Date fechaInicio;
                                    Date fechaFin;
                                    do {
                                        fechaInicio = BitUtil.dameFecha("Introduzca la nueva fecha inicio: (" + df.format(o.getFechaInicio()) + ")\n");
                                        fechaFin = BitUtil.dameFecha("Introduzca la nueva fecha fin: (" + df.format(o.getFechaFin()) + ")\n");
                                        if (fechaInicio.getTime() > fechaFin.getTime()) {
                                            System.out.println("La fecha de fin es anterior a la de inicio.");
                                        }
                                    } while (fechaInicio.getTime() > fechaFin.getTime());
                                    o.setFechaInicio(fechaInicio);
                                    o.setFechaFin(fechaFin);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                case 4:
                                    String diaSemana = BitUtil.dameDiaSemana("Introduzca el nuevo día de la semana: (" + o.getDiaSemana() + ")\n");
                                    o.setDiaSemana(diaSemana);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                default:
                                    System.out.println("Por favor introduzca una de las opciones posibles, gracias");
                                    break;
                            }
                        }
                    } while (seguirEditando == true);

                    System.out.println(o.toString());
                    confirmacion = BitUtil.dameConfirmacion("¿Actualizar oferta? (S/N)");

                    if (confirmacion) {
                        o.actualizar(o); //actualiza la oferta en la BD
                        System.out.println("Oferta actualizada");
                    } else {
                        System.out.println("Oferta NO actualizada");
                    }
                    break;
                case 3://eliminar
                    o.eliminar(o);//llamar metodo de oferta q la elimine de la BD
                    break;
                default:

                    break;
            }
        }
    }

    //ver, editar o eliminar la oferta numero articulo elegida antes
    public void menuOfertasNumeroArticuloSeleccionado(OfertaNumeroArticulo o) {
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        int respuesta, respuesta2;
        boolean seguirEditando = true, confirmacion;
        //como hay cuatro tipo de ofertas numero articulo creamos 4 String[]
        String parametrosOfertaNumeroArticulo1[] = {"Porcentaje Descuento: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Numero películas Alquiladas y a Pagar: "};
        String parametrosOfertaNumeroArticulo2[] = {"Dias Extras: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Numero películas Alquiladas y a Pagar: "};
        String parametrosOfertaNumeroArticulo3[] = {"Precio Nuevo: ", "Nombre: ", "Fecha Inicio y Fecha Fin: ", "Numero películas Alquiladas y a Pagar: "};
        String parametrosOfertaNumeroArticulo4[] = {"Numero películas Alquiladas y a Pagar: ", "Nombre: ", "Fecha Inicio y Fecha Fin: "};


        respuesta = BitUtil.muestraMenu("Elije opcion: ", new String[]{"Ver", "Editar", "Eliminar"});

        if (respuesta != 0) {

            switch (respuesta) {
                case 1://ver
                    System.out.println("\n" + o.toString());
                    break;
                case 2://editar
                    do {
                        if (o.getTipo() == 1) {//muestra campos editables segun oferta
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaNumeroArticulo1);
                        } else if (o.getTipo() == 2) {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaNumeroArticulo2);
                        } else if (o.getTipo() == 3) {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaNumeroArticulo3);
                        } else {
                            respuesta2 = BitUtil.muestraMenu("-- Elige campo a editar --", parametrosOfertaNumeroArticulo4);
                        }

                        if (respuesta2 != 0) {
                            switch (respuesta2) {
                                case 1:
                                    if (o.getTipo() == 1) {//editar el primer cmapo segun tipo de oferta
                                        double porcentajeNuevo;
                                        do {
                                            porcentajeNuevo = BitUtil.dameDouble("Introduzca el nuevo porcentaje:  (" + o.getDescuento() + ")\n");
                                        } while (porcentajeNuevo <= 0 || porcentajeNuevo > 100);
                                        o.setDescuento(porcentajeNuevo);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else if (o.getTipo() == 2) {
                                        int diasExtras;
                                        do {
                                            diasExtras = BitUtil.dameEntero("Introduzca los nuevos días Extras:  (" + o.getDiasExtras() + ")\n");
                                        } while (diasExtras <= 0);
                                        o.setDiasExtras(diasExtras);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else if (o.getTipo() == 3) {
                                        double precioNuevo;
                                        do {
                                            precioNuevo = BitUtil.dameDouble("Introduzca el nuevo precio:  (" + o.getPrecioNuevo() + ")\n");
                                        } while (precioNuevo <= 0);
                                        o.setPrecioNuevo(precioNuevo);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    } else {
                                        int numAlquiladas, numPagar;
                                        do {
                                            numAlquiladas = BitUtil.dameEntero("Introduzca el nuevo numero de pelis alquiladas: " + o.getNumAlquiladas() + ")\n");
                                            numPagar = BitUtil.dameEntero("Introduzca el nuevo numero de pelis a pagar: " + o.getNumPagar() + ")\n");
                                            if (numAlquiladas < numPagar) {
                                                System.out.println("Número de peliculas a pagar mayor que alquiladas.");
                                            }
                                        } while (numAlquiladas < numPagar);
                                        o.setNumAlquiladas(numAlquiladas);
                                        o.setNumPagar(numPagar);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                        break;
                                    }
                                case 2://resto de camopos
                                    String nombreNuevo = BitUtil.dameCadena("Introduzca el nuevo nombre: (" + o.getNombre() + ")\n");
                                    o.setNombre(nombreNuevo);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                case 3:
                                    Date fechaInicio;
                                    Date fechaFin;
                                    do {
                                        fechaInicio = BitUtil.dameFecha("Introduzca la nueva fecha inicio: (" + df.format(o.getFechaInicio()) + ")\n");
                                        fechaFin = BitUtil.dameFecha("Introduzca la nueva fecha fin: (" + df.format(o.getFechaFin()) + ")\n");
                                        if (fechaInicio.getTime() > fechaFin.getTime()) {
                                            System.out.println("La fecha de fin es anterior a la de inicio.");
                                        }
                                    } while (fechaInicio.getTime() > fechaFin.getTime());
                                    o.setFechaInicio(fechaInicio);
                                    o.setFechaFin(fechaFin);
                                    seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    break;
                                case 4://en el caso de q sea ofert a tipo 4 este campo no se edita
                                    if (o.getTipo() != 4) {
                                        int numAlquiladas;
                                        int numPagar;
                                        numAlquiladas = BitUtil.dameEntero("Introduzca el nuevo numero de pelis alquiladas: " + o.getNumAlquiladas() + ")\n");
                                        numPagar = numAlquiladas;
                                        o.setNumAlquiladas(numAlquiladas);
                                        o.setNumPagar(numPagar);
                                        seguirEditando = BitUtil.dameConfirmacion("¿Desea seguir editando?[S/N]");
                                    }
                                    break;
                                default:
                                    System.out.println("Por favor introduzca una de las opciones posibles, gracias");
                                    break;
                            }
                        }
                    } while (seguirEditando);

                    System.out.println(o.toString());
                    confirmacion = BitUtil.dameConfirmacion("¿Actualizar oferta? (S/N)");

                    if (confirmacion) {
                        o.actualizar(o);//llamar a metodo q actualice la oferta en la BD
                        System.out.println("Oferta actualizada");

                    } else {
                        System.out.println("Oferta no actualizada");
                    }
                    break;
                case 3://eliminar oferta
                    o.eliminar(o);//llamar metodo de oferta q la elimine de la BD
                    break;
                default:

                    break;
            }
        }
    }

    


    /**
     * Muestra las posibles estadísticas
     * PRINCIPAL > ESTADISTICAS
     */
    private void menuEstadisticas() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU ESTADISTICAS", new String[]{"Ver bloqueados", "Peliculas mas alquiladas", "Peliculas menos alquiladas"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesEstadisticas.opcionEstadisticasVerBloqueados();
                    break;
                case 2:
                    OpcionesEstadisticas.opcionEstadisticasPeliculasMasAlquiladas();
                    break;
                case 3:
                    OpcionesEstadisticas.opcionEstadisticasPeliculasMenosAlquiladas();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Muestra las opciones de caja
     * PRINCIPAL > CAJA
     */
    private void menuCaja() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU CAJA", new String[]{"Ultimos movimientos", "Generar informe"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesCaja.opcionCajaUltimosMovimientos();
                    break;
                case 2:
                    OpcionesCaja.opcionCajaGenerarInforme();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Abre el sub-menú que hace referencia a los empleados
     * PRINCIPAL > EMPLEADOS
     */
    private void menuProveedores() {
        int respuesta;
        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU PROVEEDORES", new String[]{"Buscar proveedores", "Alta proveedor"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    Proveedor proveedor = Selector.proveedor();
                    if (proveedor != null) {
                        menuProveedoresSeleccionado(proveedor);
                    }
                    break;
                case 2:
                    OpcionesProveedores.opcionProveedoresDarAlta();
                    break;
            }
        } while (respuesta != 0);
    }

    /**
     * Permite seleccionar un empleado
     * PRINCIPAL > EMPLEADOS > BUSCAR > SELECCIONADO
     */
    private void menuProveedoresSeleccionado(Proveedor proveedor) {
        int respuesta;

        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            System.out.println("Proveedor: " + proveedor.getNombre() + " " + proveedor.getApellidos() +"\n\n");
            respuesta = BitUtil.muestraMenu("MENU PROVEEDORES SELECCIONADO", new String[]{"Ver proveedor", "Dar de Baja", "Editar"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesProveedores.opcionProveedoresVer(proveedor);
                    break;
                case 2:
                    OpcionesProveedores.opcionProveedoresDarBaja(proveedor);
                    break;
                case 3:
                    OpcionesProveedores.opcionProveedoresEditar(proveedor);
                    break;
            }
        } while (respuesta != 0);
    }
    
    /**
     * Muestra las opciones de datos del videoclub
     */
    private void menuVideoclub() {
        int respuesta;
        Videoclub videoclub = Videoclub.seleccionarVideoclubBD();

        do {
            if (bajaPrincipal) {
                return;
            }
            BitUtil.borra();
            respuesta = BitUtil.muestraMenu("MENU VIDEOCLUB", new String[]{"Ver", "Editar"});
            switch (respuesta) {
                case -1:
                    bajaPrincipal = true;
                    break;
                case 1:
                    OpcionesVideoclub.opcionVideoclubVer(videoclub);
                    break;
                case 2:
                    OpcionesVideoclub.opcionVideoclubEditar(videoclub);
                    break;
            }
        } while (respuesta != 0);
    }


    
    
    
    //menu q te da la opcion de buscar una oferta del  tipo DiaSemana o NumeroArticulo=
    public void menuOfertaBuscar() {
        int respuesta;
        do {
            respuesta = BitUtil.muestraMenu("MENU OFERTA BUSCAR", new String[]{"Oferta Día de la Semana", "Oferta Número de Articulos"});
            switch (respuesta) {
                case 1:
                    List<OfertaDiaSemana> listOf = new ArrayList();
                    OfertaDiaSemana o;
                    listOf = menuOfertaDiaSemana(); //devuelve una lista de ofertasDiaSemana (antigua, actual o futura)

                    if (listOf.isEmpty()) {
                        System.out.println("No hay ofertas de este tipo");
                        break;
                    } else {
                        o = menuOfertaDiaSemanaSelecionada(listOf); //devuelve una oferta elegida de entre la lista
                        if (o != null) {
                            OpcionesOfertas.menuOfertaDiaSemanaSelecionadaOpcion(o);    //manda dicha oferta para q se vea, edite o elimine
                        }
                        break;
                    }
                case 2:
                    List<OfertaNumeroArticulo> listOf2 = new ArrayList();
                    OfertaNumeroArticulo o2;
                    listOf2 = menuOfertaNumeroArticulo(); //devuelve una lista de ofertasNumeroArticulo (antogua, acutal, futura)

                    if (listOf2.isEmpty()) {
                        System.out.println("No hay ofertas de este tipo");
                        break;
                    } else {
                        o2 = menuOfertaNumeroArticuloSelecionada(listOf2); //devuelve una oferta concreta de la lista
                        if (o2 != null) {
                            OpcionesOfertas.menuOfertaNumeroArticuloSelecionadaOpcion(o2);  //manda ducha oferta para verla, editarla o eliminarla

                        }
                        break;
                    }
            }
        } while (respuesta != 0);
    }
    
    //menu que te da para elegir entre Oferta Dia Semana (Antigua, actual o futura) y devuelve una lista
    public List<OfertaDiaSemana> menuOfertaDiaSemana() {

        Date fechaBusqueda = new Date();
        List<OfertaDiaSemana> o1 = new ArrayList();
        String busqueda[] = {"Antiguas", "Actuales", "Futuras"};
        int respuesta;
        respuesta = BitUtil.muestraMenu("MENU SELECCIONAR OFERTA DIA SEMANA", busqueda);
        switch (respuesta) {
            case 1:
                o1 = OfertaDiaSemana.seleccionarOferta(fechaBusqueda, "Antiguas");
                break;
            case 2:
                o1 = OfertaDiaSemana.seleccionarOferta(fechaBusqueda, "Actuales");
                break;
            case 3:
                o1 = OfertaDiaSemana.seleccionarOferta(fechaBusqueda, "Futuras");
                break;
            default:
                break;
        }
        return o1;
    }

    //menu que te da para elegir entre las ofertas de numero de articulo si las quiere antiguas, actuales o futuras y devuelve una lista
    public List<OfertaNumeroArticulo> menuOfertaNumeroArticulo() {

        Date fechaBusqueda = new Date();
        List<OfertaNumeroArticulo> o2 = new ArrayList();
        boolean seguirBuscando = true;
        String busqueda[] = {"Antiguas", "Actuales", "Futuras"};
        int respuesta;
        seguirBuscando = true;
        respuesta = BitUtil.muestraMenu("MENU SELECCIONAR OFERTA NUMERO ATICULOS", busqueda);
        switch (respuesta) {
            case 1:
                o2 = OfertaNumeroArticulo.seleccionarOferta(fechaBusqueda, "Antiguas");
                break;
            case 2:
                o2 = OfertaNumeroArticulo.seleccionarOferta(fechaBusqueda, "Actuales");
                break;
            case 3:
                o2 = OfertaNumeroArticulo.seleccionarOferta(fechaBusqueda, "Futuras");
                break;
            default:
                seguirBuscando = false;
                break;
        }
        return o2;
    }

    //menu q te muestra una lista de ofertas dia de la semana  para elegir una
    public OfertaDiaSemana menuOfertaDiaSemanaSelecionada(List<OfertaDiaSemana> o) {
        //edita borra elimina
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        int tipo, contador = 0, respuesta = -1;
        OfertaDiaSemana tempOf = null;
        String ofertaDiaSemana[] = new String[o.size()];
        for (OfertaDiaSemana of1 : o) {
            tipo = of1.getTipo();
            if (tipo == 1) {
                ofertaDiaSemana[contador] = of1.getNombre() + " - " + of1.getDescuento() + "% descuento - "
                        + df.format(of1.getFechaInicio()) + " - " + df.format(of1.getFechaFin()) + " - " + of1.getDiaSemana();
            } else if (tipo == 2) {
                ofertaDiaSemana[contador] = of1.getNombre() + " - " + of1.getDiasExtras() + " días extras - "
                        + df.format(of1.getFechaInicio()) + " - " + df.format(of1.getFechaFin()) + " - " + of1.getDiaSemana();
            } else {
                ofertaDiaSemana[contador] = of1.getNombre() + " - " + of1.getPrecioNuevo() + " precio nuevo - "
                        + df.format(of1.getFechaInicio()) + " - " + df.format(of1.getFechaFin()) + " - " + of1.getDiaSemana();
            }
            contador++;
        }
        respuesta = BitUtil.muestraMenu("Elige oferta: ", ofertaDiaSemana);
        if (respuesta != 0) {
            tempOf = o.get((respuesta) - 1);
        }
        return tempOf;
    }

    //menu que te muestras una lista de ofertas numero articulos y te da a elegir una
    public OfertaNumeroArticulo menuOfertaNumeroArticuloSelecionada(List<OfertaNumeroArticulo> o) {
        //edita borra elimina
        DateFormat df = new SimpleDateFormat("dd-MM-yyyy");
        int tipo, contador = 0, respuesta = -1;
        OfertaNumeroArticulo tempOf = null;

        String ofertaNumeroArticulo[] = new String[o.size()];
        for (OfertaNumeroArticulo of2 : o) {
            tipo = of2.getTipo();
            if (tipo == 1) {
                ofertaNumeroArticulo[contador] = of2.getNombre() + " - " + of2.getDescuento() + "% descuento - "
                        + of2.getFechaInicio() + " - " + of2.getFechaFin() + " - " + of2.getNumAlquiladas() + ""
                        + " alquiladas - " + of2.getNumPagar() + " a pagar";
            } else if (tipo == 2) {
                ofertaNumeroArticulo[contador] = of2.getNombre() + " - " + of2.getDiasExtras() + " días extras - "
                        + of2.getFechaInicio() + " - " + of2.getFechaFin() + " - " + of2.getNumAlquiladas() + ""
                        + " alquiladas - " + of2.getNumPagar() + " a pagar";
            } else {
                ofertaNumeroArticulo[contador] = of2.getNombre() + " - " + of2.getPrecioNuevo() + " precio nuevo - "
                        + of2.getFechaInicio() + " - " + of2.getFechaFin() + " - " + of2.getNumAlquiladas() + ""
                        + " alquiladas - " + of2.getNumPagar() + " a pagar";
            }
            contador++;
        }
        respuesta = BitUtil.muestraMenu("Elige oferta: ", ofertaNumeroArticulo);
        if (respuesta != 0) {
            tempOf = o.get((respuesta) - 1);
        }
        return tempOf;
    }
    
}
